package com.learn.finished;

/**
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * <p>
 * 如果反转后整数超过 32 位的有符号整数的范围 [−2^31,  2^31 − 1] ，就返回 0。
 * <p>
 * 假设环境不允许存储 64 位整数（有符号或无符号）
 */
public class num_7 {
    public static int reverse(int x) {
        //还需要判断转置过后是否超出限制
        if (x == 0) {
            return 0;
        }
        String ints = Integer.toString(x);
        char[] chars = ints.toCharArray();
        int begin = 0;
        int end = ints.length() - 1;
        int judge = 0;
        if (x < 0) {
            begin = 1;
        }
        int copyBegin = begin;
        if (copyBegin == 0) {
            judge = (int) Math.pow(2, 31) - 1;
        } else if (copyBegin == 1) {
            //[-, 2, 1, 4, 7, 4, 8, 3, 6, 4, 8]
            judge = (int) Math.pow(-2, 31);
        }

        char[] judgeArray = Integer.toString(judge).toCharArray();
        while (begin < end) {
            char tmp = chars[begin];
            chars[begin] = chars[end];
            chars[end] = tmp;
            begin++;
            end--;
        }
        boolean overflow = true;
        if (judgeArray.length == chars.length) {
            while (overflow) {

                if (judgeArray[copyBegin] < chars[copyBegin]) {
                    return 0;
                } else if (judgeArray[copyBegin] > chars[copyBegin]) {
                    overflow = false;
                }
                copyBegin += 1;
            }
        }

        return Integer.parseInt(String.valueOf(chars));
    }

    public static void main(String[] args) {
        //[-, 2, 1, 4, 7, 4, 8, 3, 6, 4, 8]
        //[-, 2, 1, 4, 3, 8, 4, 7, 4, 1, 2]

        //对于负数而言，数字大的反而小，例如-2<-1
        //那么，数字大的，就越界了
        //同样的，对于正数而言，数字大的也就更大，例如2>1
        //那么，数字大的也就越界了
        System.out.println(reverse(-2147483412));
    }
}
